package cn.elegent.tx.core.storage;

import cn.elegent.tx.core.entity.TransactionEntity;
import cn.elegent.tx.core.entity.state.TransactionState;
import cn.elegent.tx.core.rollback.RollBackDTO;

import java.util.List;

/**
 * 事务接口类
 * 事务分为总事务和具体子事务
 */
public interface TransactionStorage{

    /**
     * 事务初始化的方法
     * @return
     */
    boolean begin(TransactionEntity transactional);


    /**
     * 修改事务状态的方法
     * @param transactionEntity
     * @param transactionState
     * @return
     */
    boolean change(TransactionEntity transactionEntity,TransactionState transactionState);

    /**
     * 销毁事务的方法
     * @return
     */
    boolean destroy(TransactionEntity transactionEntity);

    /**
     * 根据事务获取所有需要回滚的事务的信息
     * @param transactionEntity
     */
    List<RollBackDTO> getAllNeedRollBackInfo(TransactionEntity transactionEntity, TransactionState state);

    /**
     * 在redis中记录我们的事务的回滚参数
     * @param transactionEntity
     */
    boolean saveRollBackArgs(TransactionEntity transactionEntity);

}
